package com.aaron.loadbalance.loadbalancer;

import com.aaron.loadbalance.AbstractLoadBalance;
import com.aaron.remoting.dto.RpcRequest;

import java.util.List;
import java.util.Random;

/**
 * Dubbo 提供了4种负载均衡实现，
 * 分别是基于权重随机算法的 RandomLoadBalance、
 * 基于最少活跃调用数算法的 LeastActiveLoadBalance、
 * 基于 hash 一致性的 ConsistentHashLoadBalance、
 * 以及基于加权轮询算法的 RoundRobinLoadBalance。
 * 在 Dubbo 中，所有负载均衡实现类均继承自 AbstractLoadBalance。
 */
public class RandomLoadBalance extends AbstractLoadBalance {
    // 使用随机整数来选择的
    @Override
    protected String doSelect(List<String> serviceAddresses, RpcRequest rpcRequest) {
        Random random = new Random();
        // 将随机从服务地址的集合中选出一个服务地址
        return serviceAddresses.get(random.nextInt(serviceAddresses.size()));
    }
}
